const app = getApp()
const uploadFile = require('../../utils/uploadAliyun.js')
Page({

  /**
   * 页面的初始数据
   */
  data: {
    img_src: "../../static/images/index/record_stop.jpg",
    bool_src: false,
    time: null,
    minute: 0,
    second: 0,
    date: "00 : 00",
    record: true,
    tempFilePath: '', // 录音音频src
    duration: 0, // 录音音频时长
    work_id: '', // 作业ID
    article_id: '', // 文章ID
    articleDetail: '', // 文章详情
    article_text: '', // 文章内容
    fontSetSize: 'small', // 用户设置的字体大小（'small'：小，'middle'：中，'large'：大）
    showPopup: false, // 是否打开文章内容弹窗（true: 打开，false: 关闭）
    // "复制按钮"拖拽参数
    writePosition: [15, 185], //默认定位参数
    writesize: [0, 0], // X Y 定位
    window: [0, 0], // 屏幕尺寸
    write: [0, 0], // 定位参数
    credit:0 ,
    creditNum:0
  },

  /**
   * 获取文章详情
   */
  getArticleDetails () {
    let token = wx.getStorageSync('token')
    let article_id = this.data.article_id
    app.http({
      config: {
        url: '/api/User/article_info',
        data: {
          token,
          article_id
        },
        method: 'POST'
      },
      isAuth: false
    }).then(res => {
      console.log(res, 'articleDetailRes')
      let articleDetail = res.data.data
      // let article_text = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + articleDetail.text.replace(/\r\n/g,"\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")
      let article_text = articleDetail.text;
      this.setData({
        articleDetail,
        article_text
      })
    }).catch(err => {
      console.log(err, 'articleDetailErr')
    })
  },

  /**
   * 开始/暂停 录音
   */
  handleRecording () {
    let _this = this
    // 通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" (录音功能) 这个 scope
    wx.getSetting({
      success(res) {
        // console.log(res, 'settingRes')
        if (!res.authSetting['scope.record']) { // 用户还未授权过录音功能
          // 弹出询问弹窗询问用户是否同意小程序使用录音功能
          wx.authorize({
            scope: 'scope.record',
            success () {
              // 用户同意小程序使用录音功能
              // console.log('用户同意授权录音功能')
              _this.soundRecording()
            },
            fail () {
              // 用户拒绝小程序使用录音功能
              // console.log('用户拒绝授权录音功能')
            }
          })
        } else { // 用户已授权过录音功能
          // console.log('用户已授权过录音功能')
          _this.soundRecording()
        }
      }
    })
  },

  // 录音
  soundRecording() {
    
    const recorderManager = wx.getRecorderManager() // 获取全局唯一的录音管理器 RecorderManager
    /**
     * 录音配置
     */
    const options = {
      duration: 600000, // 录音的时长，单位 ms，最大值 600000（10 分钟）
      sampleRate: 32000, // 采样率（最大48000）
      numberOfChannels: 1, // 录音通道数
      encodeBitRate: 192000, // 编码码率
      format: 'aac', // 音频格式
      frameSize: 50, // 指定帧大小，单位 KB
      tempFilePath: '' // 用户录音文件临时路径
    }
    
    if (!this.data.bool_src) {

      // 改变录音按钮状态图标（开启状态）
      this.setData({
        img_src: "../../static/images/index/record_start.jpg" ,
        bool_src: true
      });

      // 通过record来判断是否第一次开启录音（true：第一次开启录音，false：不是第一次开启录音，已经录过音但是暂停了）
      if (this.data.record) {
        recorderManager.start(options) // 开始录音
        // 监听录音开始事件
        recorderManager.onStart(() => {
          console.log('recorder start')
        })
        this.setData({
          record: false
        })
      } else {
        recorderManager.resume() // 继续录音
      }

      let minute = Number(this.data.minute);
      let second = Number(this.data.second);
      minute = minute < 10 ? "0" + minute : minute; 
      second = second < 10 ? "0" + second : second; 
      this.data.time = setInterval(()=>{
        second++;
        second =  second < 10 ?  "0" + second : second; 
        // console.log(minute, second)
        if(second > 59){
          minute++;
          if (minute >= 10) { // 录音时长达到允许的最大时长，10分钟
            recorderManager.stop() // 停止录音
            // 监听录音结束事件
            recorderManager.onStop((res) => {
              console.log('recorder stop', res)
              const { tempFilePath } = res
              console.log('tempFilePath', tempFilePath)
            })
            clearInterval(this.data.time)
            this.setData({
              record: false
            })
          } else {
            minute = '0' + minute;
          }
          second = '00';
        }
        this.setData({
          date: `${minute} : ${second}`,
          minute,
          second
        })
        // 监听已录制完指定帧大小的文件事件。如果设置了 frameSize，则会回调此事件，使用此方法会造成严重卡顿
        /*recorderManager.onFrameRecorded((res) => {
          const { frameBuffer } = res
          console.log('frameBuffer.byteLength', frameBuffer.byteLength)
        })*/
      } , 1000)
    } else {
      // 改变录音按钮状态图标（停止状态）
      this.setData({
        img_src: "../../static/images/index/record_stop.jpg",
        bool_src: false
      });
      recorderManager.pause() // 暂停录音
      // 监听录音暂停事件
      recorderManager.onPause(() => {
        console.log('recorder pause')
      })
      clearInterval(this.data.time)
    }
  },

  // 重录
  onAgain () {
    const recorderManager = wx.getRecorderManager() // 获取全局唯一的录音管理器 RecorderManager
    recorderManager.stop() // 停止录音
    this.setData({
      tempFilePath: ''
    })
    clearInterval(this.data.time)
    this.setData({
      img_src: "../../static/images/index/record_stop.jpg",
      bool_src: false,
      date: '00 : 00',
      minute: 0,
      second: 0
    })
  },

  // 提交
  handleSubmit () {
    console.log("提交");
    const recorderManager = wx.getRecorderManager() // 获取全局唯一的录音管理器 RecorderManager
    let _this = this
    let minute = Number(_this.data.minute)
    let second = Number(_this.data.second)
    // 改变录音按钮状态图标（停止状态）
    _this.setData({
      img_src: "../../static/images/index/record_stop.jpg",
      bool_src: false
    });
    clearInterval(_this.data.time)
    if (minute >= 2) { // 用户录音时长是否超过2分钟
      recorderManager.stop() // 停止录音
      // 监听录音结束事件
      recorderManager.onStop((res) => {
        // console.log('recorder stop', res)
        const { tempFilePath } = res
        let duration = res.duration / 1000
        console.log('tempFilePath', tempFilePath)
        console.log('duration', duration)
        _this.setData({
          tempFilePath,
          duration
        })
      })
      wx.showModal({
        title: '提示',
        content: '是否提交录音？',
        success (res) {
          if (res.confirm) {
            wx.showLoading({
              title: '上传中',
            })
            // 音频上传阿里云oss
            uploadFile(_this.data.tempFilePath, 'audio/',
              function (res) {
                console.log("上传成功", res) // 音频文件成功上传阿里云
                // 将结果上传给后端
                let token = wx.getStorageSync('token') // 用户登录token
                let study_url = res // 录音音频路径
                let playtime = _this.data.duration
                let article_id = _this.data.article_id
                app.http({
                  config: {
                    url: '/api/User/add_work',
                    data: {
                      token,
                      class_work_id: _this.data.work_id, // 作业ID
                      is_opend: 2, // 全部人可见
                      study_url,
                      playtime ,
                      article_id 
                    },
                    method: 'POST'
                  },
                  isAuth: true
                }).then(res => {
                  wx.hideLoading()
                   console.log(res , "1111111111111111111111111")
                   
                  console.log(res, 'uploadRes')

                  wx.showToast({
                    icon: 'success',
                    title: res.data.message
                  })
                  if(res.data.data.integral_day >= 1){
                    _this.setData({
                       credit:true ,
                       creditNum:res.data.data.integral_day
                    })
                  }else{
                    let timer = setTimeout(() => {
                      wx.navigateBack({
                        delta: 2,
                      })
                      clearTimeout(timer)
                    }, 3000)
                  }
                }).catch(err => {
                  wx.hideLoading()
                  wx.showToast({
                    icon: 'none',
                    title: res.data.message
                  })
                  let timer = setTimeout(() => {
                    wx.hideToast()
                    clearTimeout(timer)
                  }, 2000)
                  console.log(err, 'uploadErr')
                })
              },
              function (err) {
                wx.hideLoading()
                console.log("上传失败", err)
                wx.showModal({
                  title: '提示',
                  content: '上传失败',
                  showCancel: false
                })
              }
            )
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    } else {
      if (second > 0) {
        wx.showToast({
          icon: 'none',
          title: '录音时间过短'
        })
      } else {
        wx.showToast({
          icon: 'none',
          title: '请先录音'
        })
      }
    }
  },

  /**
   * 关闭文章内容弹窗
   */
  handleClosePopup () {
    this.setData({
      showPopup: false
    })
  },

  /**
   * 打开文章内容弹窗
   */
  handleOpenPopup () {
    this.setData({
      showPopup: true
    })
  },

  /**
   * 打开文章内容弹窗后禁止下面页面滚动
   */
  doNotScroll () {},

  /**
   * 计算默认定位值 
   */ 
  getSysdata () {
    let that = this
    wx.getSystemInfo({
      success (e) {
        let window = [e.windowWidth, e.windowHeight]
        let write = []
        write[0] = that.data.writePosition[0]
        write[1] = that.data.writePosition[1]
        // console.log('write', write)
        that.setData({
          window,
          write,
        }, function () {
          // 获取元素宽高
          wx.createSelectorQuery().select('.open-popup').boundingClientRect(function (res) {
            // console.log(res.width)
            // console.log(res.height)
            let writesize = [res.width, res.height]
            that.setData({
              writesize
            })
          }).exec()
        })
      },
      fail (e) {
        console.log(e)
      }
    })
  },

  /**
   * 开始拖拽 
   */  
  touchmove (e) {
    let that = this
    let positionRight = 0
    if (e.touches[0].clientX < (that.data.writesize[0] / 2)) {
      positionRight = that.data.window[0] - that.data.writesize[0] - 1
    } else {
      if (e.touches[0].clientX > (that.data.window[0] - that.data.writesize[0] / 2)) {
        positionRight = 0
      } else {
        positionRight = that.data.window[0] - e.touches[0].clientX - that.data.writesize[0] / 2
      }
    }
    let positionBottom = 0
    if (e.touches[0].clientY < (that.data.writesize[1] / 2)) {
      positionBottom = that.data.window[1] - that.data.writesize[1]
    } else {
      if (e.touches[0].clientY > (that.data.window[1] - that.data.writesize[1] / 2)) {
        positionBottom = 0
      } else {
        positionBottom = that.data.window[1] - e.touches[0].clientY - that.data.writesize[1] / 2
      }
    }
    let position = [positionRight, positionBottom]
    that.setData({
      write: position
    })
  },

  onLoad: function (options) {
    console.log(options , "1111111111111111")
  
    let work_id = options.work_id
    let article_id = options.article_id
    this.setData({
      work_id,
      article_id
    })



    // 在页面中定义"复制原文"按钮位置
    this.getSysdata()

    this.getArticleDetails()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let fontSetSize = wx.getStorageSync('fontSetSize') // 本地缓存中用户设置的字体大小
    if (fontSetSize) {
      this.setData({
        fontSetSize
      })
    }
  },
  
  onUnload: function () {
    clearInterval(this.data.time)
  }
})